'\" t
.\"     Title: \fBmysqldbcompare\fR
.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
.\"      Date: 01/14/2017
.\"    Manual: MySQL Utilities
.\"    Source: MySQL 1.6.4
.\"  Language: English
.\"
.TH "\FBMYSQLDBCOMPARE\FR" "1" "01/14/2017" "MySQL 1\&.6\&.4" "MySQL Utilities"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.\" http://bugs.debian.org/507673
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
mysqldbcompare \- Compare Two Databases and Identify Differences
.SH "SYNOPSIS"
.HP \w'\fBmysqldbcompare\ [\fR\fB\fIoptions\fR\fR\fB]\ \fR\fB\fIdb1\fR\fR\fB\ [\fR\fB\fI:db2\fR\fR\fB]\ \&.\&.\&.\fR\ 'u
\fBmysqldbcompare [\fR\fB\fIoptions\fR\fR\fB] \fR\fB\fIdb1\fR\fR\fB [\fR\fB\fI:db2\fR\fR\fB] \&.\&.\&.\fR
.SH "DESCRIPTION"
.PP
This utility compares the objects and data from two databases to find differences\&. It identifies objects having different definitions in the two databases and presents them in a diff\-style format of choice\&. Differences in the data are shown using a similar diff\-style format\&. Changed or missing rows are shown in a standard format of GRID, CSV, TAB, or VERTICAL\&.
.PP
Use the notation db1:db2 to name two databases to compare, or, alternatively just db1 to compare two databases with the same name\&. The latter case is a convenience notation for comparing same\-named databases on different servers\&.
.PP
The comparison may be run against two databases of different names on a single server by specifying only the
\fB\-\-server1\fR
option\&. The user can also connect to another server by specifying the
\fB\-\-server2\fR
option\&. In this case, db1 is taken from server1 and db2 from server2\&.
.PP
All databases between two servers can also be compared using the
\fB\-\-all\fR
option\&. In this case, only the databases in common (with the same name) between the servers are successively compared\&. Therefore, no databases need to be specified but the
\fB\-\-server1\fR
and
\fB\-\-server2\fR
options are required\&. Users can skip the comparison of some of the databases using the
\fB\-\-exclude\fR
option\&.
.if n \{\
.sp
.\}
.RS 4
.it 1 an-trap
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
.ps +1
\fBNote\fR
.ps -1
.br
.PP
The data must not be changed during the comparison\&. Unexpected errors may occur if data is changed during the comparison\&.
.sp .5v
.RE
.PP
The objects considered in the database include tables, views, triggers, procedures, functions, and events\&. A count for each object type can be shown with the
\fB\-vv\fR
option\&.
.PP
The check is performed using a series of steps called tests\&. By default, the utility stops on the first failed test, but you can specify the
\fB\-\-run\-all\-tests\fR
option to cause the utility to run all tests regardless of their end state\&.
.if n \{\
.sp
.\}
.RS 4
.it 1 an-trap
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
.ps +1
\fBNote\fR
.ps -1
.br
.PP
Using
\fB\-\-run\-all\-tests\fR
may produce expected cascade failures\&. For example, if the row counts differ among two tables being compared, the data consistency also fails\&.
.sp .5v
.RE
.PP
The tests include the following:
.sp
.RS 4
.ie n \{\
\h'-04' 1.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  1." 4.2
.\}
Check database definitions
.sp
A database existence precondition check ensures that both databases exist\&. If they do not, no further processing is possible and the
\fB\-\-run\-all\-tests\fR
option is ignored\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 2.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  2." 4.2
.\}
Check existence of objects in both databases
.sp
The test for objects in both databases identifies those objects missing from one or another database\&. The remaining tests apply only to those objects that appear in both databases\&. To skip this test, use the
\fB\-\-skip\-object\-compare\fR
option\&. That can be useful when there are known missing objects among the databases\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 3.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  3." 4.2
.\}
Compare object definitions
.sp
The definitions (the
\fBCREATE\fR
statements) are compared and differences are presented\&. To skip this test, use the
\fB\-\-skip\-diff\fR
option\&. That can be useful when there are object name differences only that you want to ignore\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 4.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  4." 4.2
.\}
Check table row counts
.sp
This check ensures that both tables have the same number of rows\&. This does not ensure that the table data is consistent\&. It is merely a cursory check to indicate possible missing rows in one table or the other\&. The data consistency check identifies the missing rows\&. To skip this test, use the
\fB\-\-skip\-row\-count\fR
option\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 5.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  5." 4.2
.\}
Check table data consistency
.sp
This check identifies both changed rows as well as missing rows from one or another of the tables in the databases\&. Changed rows are displayed as a diff\-style report with the format chosen (\fBGRID\fR
by default) and missing rows are also displayed using the format chosen\&. This check is divided in two steps: first the full table checksum is compared between the tables, then if this step fails (or is skipped) the algorithm to find rows differences is executed\&. To skip the preliminary checksum table step in this test, use the
\fB\-\-skip\-checksum\-table\fR
option\&. To skip this full test, use the
\fB\-\-skip\-data\-check\fR
option\&.
.RE
.PP
You may want to use the
\-\-skip\-xxx
options to run only one of the tests\&. This might be helpful when working to bring two databases into synchronization, to avoid running all of the tests repeatedly during the process\&.
.PP
Each test completes with one of the following states:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fBpass\fR
.sp
The test succeeded\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fBFAIL\fR
.sp
The test failed\&. Errors are displayed following the test state line\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fBSKIP\fR
.sp
The test was skipped due to a missing prerequisite or a skip option\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fBWARN\fR
.sp
The test encountered an unusual but not fatal error\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fB\-\fR
.sp
The test is not applicable to this object\&.
.RE
.PP
To specify how to display diff\-style output, use one of the following values with the
\fB\-\-difftype\fR
option:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fBunified\fR
(default)
.sp
Display unified format output\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fBcontext\fR
.sp
Display context format output\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fBdiffer\fR
.sp
Display differ\-style format output\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fBsql\fR
.sp
Display SQL transformation statement output\&.
.RE
.PP
To specify how to display output for changed or missing rows, use one of the following values with the
\fB\-\-format\fR
option:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fBgrid\fR
(default)
.sp
Display output in grid or table format like that of the
\fBmysql\fR
client command\-line tool\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fBcsv\fR
.sp
Display output in comma\-separated values format\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fBtab\fR
.sp
Display output in tab\-separated format\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fBvertical\fR
.sp
Display output in single\-column format like that of the
\eG
command for the
\fBmysql\fR
client command\-line tool\&.
.RE
.PP
The
\fB\-\-changes\-for\fR
option controls the direction of the difference (by specifying the object to be transformed) in either the difference report (default) or the transformation report (designated with the
\fB\-\-difftype=sql\fR
option)\&. Consider the following command:
.sp
.if n \{\
.RS 4
.\}
.nf
shell> \fBmysqldbcompare \-\-server1=root@host1 \-\-server2=root@host2 \-\-difftype=sql db1:dbx\fR
.fi
.if n \{\
.RE
.\}
.PP
The leftmost database (db1) exists on the server designated by the
\fB\-\-server1\fR
option (host1)\&. The rightmost database (dbx) exists on the server designated by the
\fB\-\-server2\fR
option (host2)\&.
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fB\-\-changes\-for=server1\fR: Produce output that shows how to make the definitions of objects on
server1
like the definitions of the corresponding objects on
server2\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\fB\-\-changes\-for=server2\fR: Produce output that shows how to make the definitions of objects on
server2
like the definitions of the corresponding objects on
server1\&.
.RE
.PP
The default direction is
server1\&.
.PP
You must provide connection parameters (user, host, password, and so forth) for an account that has the appropriate privileges to access all objects in the operation\&.
.PP
If the utility is to be run on a server that has binary logging enabled, and you do not want the comparison steps logged, use the
\fB\-\-disable\-binary\-logging\fR
option\&.
OPTIONS.PP
\fBmysqldbcompare\fR
accepts the following command\-line options:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-all, \-a
.sp
Compare all database in common (with the same name) between two servers\&.
.sp
The
\fB\-\-all\fR
option ignores the following databases:
\fIINFORMATION_SCHEMA\fR,
\fIPERFORMANCE_SCHEMA\fR,
\fImysql\fR, and
\fIsys\fR\&.
.if n \{\
.sp
.\}
.RS 4
.it 1 an-trap
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
.ps +1
\fBNote\fR
.ps -1
.br
The
\fIsys\fR
database is ignored as of Utilities 1\&.6\&.2\&.
.sp .5v
.RE
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-help
.sp
Display a help message and exit\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-license
.sp
Display license information and exit\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-changes\-for=\fIdirection\fR
.sp
Specify the server to show transformations to match the other server\&. For example, to see the transformation for transforming object definitions on server1 to match the corresponding definitions on server2, use
\fB\-\-changes\-for=server1\fR\&. Permitted values are
\fBserver1\fR
and
\fBserver2\fR\&. The default is
\fBserver1\fR\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-character\-set=\fIcharset\fR
.sp
Sets the client character set\&. The default is retrieved from the server variable
character_set_client\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-difftype=\fIdifftype\fR, \-d\fIdifftype\fR
.sp
Specify the difference display format\&. Permitted format values are
\fBunified\fR,
\fBcontext\fR,
\fBdiffer\fR, and
\fBsql\fR\&. The default is
\fBunified\fR\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-disable\-binary\-logging
.sp
If binary logging is enabled, disable it during the operation to prevent comparison operations from being written to the binary log\&. Note: Disabling binary logging requires the
\fBSUPER\fR
privilege\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-exclude=\fIexclude\fR, \-x\fIexclude\fR
.sp
Exclude one or more databases from the operation using either a specific name such as
db1
or a search pattern\&. Use this option multiple times to specify multiple exclusions\&. By default, patterns use database patterns such as
\fBLIKE\fR\&. With the
\fB\-\-regexp\fR
option, patterns use regular expressions for matching names\&.
.if n \{\
.sp
.\}
.RS 4
.it 1 an-trap
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
.ps +1
\fBNote\fR
.ps -1
.br
The utility attempts to determine if the pattern supplied has any special characters (such as an asterisks), which may indicate that the pattern could be a REGEXP pattern\&. If there are special, non\-SQL LIKE pattern characters and the user has not specified the
\fB\-\-regexp\fR
option, a warning is presented to suggest the user check the pattern for possible use with the
\fB\-\-regexp\fR
option\&.
.sp .5v
.RE
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-format=\fIformat\fR, \-f\fIformat\fR
.sp
Specify the display format for changed or missing rows\&. Permitted format values are
\fBgrid\fR,
\fBcsv\fR,
\fBtab\fR, and
\fBvertical\fR\&. The default is
\fBgrid\fR\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-compact
.sp
Compacts the output by reducing the number of control lines that are displayed in the diff results\&. This option should be used together with one of the following difference types: unified or context\&. It is most effective when used with the unified difference type and the grid format\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-quiet, \-q
.sp
Do not print anything\&. Return only an exit code of success or failure\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-regexp, \-\-basic\-regexp, \-G
.sp
Perform pattern matches using the
\fBREGEXP\fR
operator\&. The default is to use
\fBLIKE\fR
for matching\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-run\-all\-tests, \-t
.sp
Do not halt at the first difference found\&. Process all objects\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-server1=\fIsource\fR
.sp
Connection information for the first server\&.
.sp
To connect to a server, it is necessary to specify connection parameters such as the user name, host name, password, and either a port or socket\&. MySQL Utilities provides a number of ways to supply this information\&. All of the methods require specifying your choice via a command\-line option such as \-\-server, \-\-master, \-\-slave, etc\&. The methods include the following in order of most secure to least secure\&.
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Use login\-paths from your
\&.mylogin\&.cnf
file (encrypted, not visible)\&. Example :
\fIlogin\-path\fR[:\fIport\fR][:\fIsocket\fR]
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Use a configuration file (unencrypted, not visible) Note: available in release\-1\&.5\&.0\&. Example :
\fIconfiguration\-file\-path\fR[:\fIsection\fR]
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Specify the data on the command\-line (unencrypted, visible)\&. Example :
\fIuser\fR[:\fIpasswd\fR]@\fIhost\fR[:\fIport\fR][:\fIsocket\fR]
.RE
.sp
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-server2=\fIsource\fR
.sp
Connection information for the second server\&.
.sp
To connect to a server, it is necessary to specify connection parameters such as the user name, host name, password, and either a port or socket\&. MySQL Utilities provides a number of ways to supply this information\&. All of the methods require specifying your choice via a command\-line option such as \-\-server, \-\-master, \-\-slave, etc\&. The methods include the following in order of most secure to least secure\&.
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Use login\-paths from your
\&.mylogin\&.cnf
file (encrypted, not visible)\&. Example :
\fIlogin\-path\fR[:\fIport\fR][:\fIsocket\fR]
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Use a configuration file (unencrypted, not visible) Note: available in release\-1\&.5\&.0\&. Example :
\fIconfiguration\-file\-path\fR[:\fIsection\fR]
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Specify the data on the command\-line (unencrypted, visible)\&. Example :
\fIuser\fR[:\fIpasswd\fR]@\fIhost\fR[:\fIport\fR][:\fIsocket\fR]
.RE
.sp
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-show\-reverse
.sp
Produce a transformation report containing the SQL statements to conform the object definitions specified in reverse\&. For example, if \-\-changes\-for is set to server1, also generate the transformation for server2\&. Note: The reverse changes are annotated and marked as comments\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-skip\-checksum\-table
.sp
Skip the CHECKSUM TABLE step in the data consistency check\&. Added in release\-1\&.4\&.3\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-skip\-data\-check
.sp
Skip the data consistency check\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-skip\-diff
.sp
Skip the object definition difference check\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-skip\-object\-compare
.sp
Skip the object comparison check\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-skip\-row\-count
.sp
Skip the row count check\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-span\-key\-size=\fInumber of bytes to use for key\fR
.sp
Change the size of the key used for compare table contents\&. A higher value can help to get more accurate results comparing large databases, but may slow the algorithm\&.
.sp
Default value is 8\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-ssl\-ca
.sp
The path to a file that contains a list of trusted SSL CAs\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-ssl\-cert
.sp
The name of the SSL certificate file to use for establishing a secure connection\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-ssl\-key
.sp
The name of the SSL key file to use for establishing a secure connection\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-ssl
.sp
Specifies if the server connection requires use of SSL\&. If an encrypted connection cannot be established, the connection attempt fails\&. Default setting is 0 (SSL not required)\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-verbose, \-v
.sp
Specify how much information to display\&. Use this option multiple times to increase the amount of information\&. For example,
\fB\-v\fR
= verbose,
\fB\-vv\fR
= more verbose,
\fB\-vvv\fR
= debug\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-version
.sp
Display version information and exit\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-use\-indexes
.sp
List the index to use\&. Use this option to select the index to use if the table has no primary key or it has more than one unique index without null columns\&. Use this option in the format: \-\-use\-indexes="\fItable1\fR\&.\fIindexA\fR[;\fItable2\fR\&.\fIindexB\fR;]"
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-width=\fInumber\fR
.sp
Change the display width of the test report\&. The default is 75 characters\&.
.RE
NOTES.PP
The login user must have the appropriate permissions to read all databases and tables listed\&.
.PP
For the
\fB\-\-difftype\fR
option, the permitted values are not case sensitive\&. In addition, values may be specified as any unambiguous prefix of a valid value\&. For example,
\fB\-\-difftype=d\fR
specifies the differ type\&. An error occurs if a prefix matches more than one valid value\&.
.PP
The path to the MySQL client tools should be included in the
PATH
environment variable in order to use the authentication mechanism with login\-paths\&. This permits the utility to use the
\fBmy_print_defaults\fR
tools which is required to read the login\-path values from the login configuration file (\&.mylogin\&.cnf)\&.
.PP
If any database identifier specified as an argument contains special characters or is a reserved word, then it must be appropriately quoted with backticks (\fB`\fR)\&. In turn, names quoted with backticks must also be quoted with single or double quotes depending on the operating system, i\&.e\&. (\fB"\fR) in Windows or (\fB\*(Aq\fR) in non\-Windows systems, in order for the utilities to read backtick quoted identifiers as a single argument\&. For example, to compare a database with the name
\fBweird`db\&.name\fR
with
\fBother:weird`db\&.name\fR, the database pair must be specified using the following syntax (in non\-Windows):
\fB\*(Aq`weird``db\&.name`:`other:weird``db\&.name`\*(Aq\fR\&.
.PP
When comparing two databases of different names, the utility suppresses differences in the
CREATE DATABASE
statements when only the names differ\&. If any of the decorators differ, the differences in the statements is shown\&.
EXAMPLES.PP
Use the following command to compare the
emp1
and
emp2
databases on the local server, and run all tests even if earlier tests fail:
.sp
.if n \{\
.RS 4
.\}
.nf
shell> \fBmysqldbcompare \-\-server1=root@localhost emp1:emp2 \-\-run\-all\-tests\fR
# server1 on localhost: \&.\&.\&. connected\&.
# Checking databases emp1 on server1 and emp2 on server2
#
# WARNING: Objects in server2:emp2 but not in server1:emp1:
#   TRIGGER: trg
# PROCEDURE: p1
#     TABLE: t1
#      VIEW: v1
#
#                                                   Defn    Row     Data
# Type      Object Name                             Diff    Count   Check
# \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
# FUNCTION  f1                                      pass    \-       \-
# TABLE     departments                             pass    pass    \-
#           \- Compare table checksum                                FAIL
#           \- Find row differences                                  FAIL
#
# Data differences found among rows:
\-\-\- emp1\&.departments
+++ emp2\&.departments
@@ \-1,4 +1,4 @@
 *************************       1\&. row *************************
    dept_no: d002
\- dept_name: dunno
+ dept_name: Finance
 1 rows\&.
# Rows in emp1\&.departments not in emp2\&.departments
*************************       1\&. row *************************
   dept_no: d008
 dept_name: Research
1 rows\&.
# Rows in emp2\&.departments not in emp1\&.departments
*************************       1\&. row *************************
   dept_no: d100
 dept_name: stupid
1 rows\&.
# TABLE     dept_manager                            pass    pass    \-
#           \- Compare table checksum                                pass
# Database consistency check failed\&.
#
# \&.\&.\&.done
.fi
.if n \{\
.RE
.\}
.PP
Given: two databases with the same table layout\&. Data for each table contains:
.sp
.if n \{\
.RS 4
.\}
.nf
mysql> select * from db1\&.t1;
+\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+
| a | b             |
+\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+
| 1 | Test 789      |
| 2 | Test 456      |
| 3 | Test 123      |
| 4 | New row \- db1 |
+\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+
4 rows in set (0\&.00 sec)
mysql> select * from db2\&.t1;
+\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+
| a | b             |
+\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+
| 1 | Test 123      |
| 2 | Test 456      |
| 3 | Test 789      |
| 5 | New row \- db2 |
+\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+
4 rows in set (0\&.00 sec)
.fi
.if n \{\
.RE
.\}
.PP
To generate the SQL statements for data transformations to make
db1\&.t1
the same as
db2\&.t1, use the
\fB\-\-changes\-for=server1\fR
option\&. We must also include the
\fB\-a\fR
option to ensure that the data consistency test is run\&. The following command illustrates the options used and an excerpt from the results generated:
.sp
.if n \{\
.RS 4
.\}
.nf
shell> \fBmysqldbcompare \-\-server1=root:root@localhost \e\fR
    \fB\-\-server2=root:root@localhost db1:db2 \-\-changes\-for=server1 \-a \e/\fR
    \fB\-\-difftype=sql\fR
[\&.\&.\&.]
#                                                   Defn    Row     Data
# Type      Object Name                             Diff    Count   Check
#\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
# TABLE     t1                                      pass    pass    \-
#           \- Compare table checksum                                FAIL
#           \- Find row differences                                  FAIL
#
# Transformation for \-\-changes\-for=server1:
#
# Data differences found among rows:
UPDATE db1\&.t1 SET b = \*(AqTest 123\*(Aq WHERE a = \*(Aq1\*(Aq;
UPDATE db1\&.t1 SET b = \*(AqTest 789\*(Aq WHERE a = \*(Aq3\*(Aq;
DELETE FROM db1\&.t1 WHERE a = \*(Aq4\*(Aq;
INSERT INTO db1\&.t1 (a, b) VALUES(\*(Aq5\*(Aq, \*(AqNew row \- db2\*(Aq);
# Database consistency check failed\&.
#
# \&.\&.\&.done
.fi
.if n \{\
.RE
.\}
.PP
Similarly, when the same command is run with
\fB\-\-changes\-for=server2\fR
and
\fB\-\-difftype=sql\fR, the following report is generated:
.sp
.if n \{\
.RS 4
.\}
.nf
shell> \fBmysqldbcompare \-\-server1=root:root@localhost \e\fR
    \fB\-\-server2=root:root@localhost db1:db2 \-\-changes\-for=server2 \-a \e\fR
    \fB\-\-difftype=sql\fR
[\&.\&.\&.]
#                                                   Defn    Row     Data
# Type      Object Name                             Diff    Count   Check
#\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
# TABLE     t1                                      pass    pass    \-
#           \- Compare table checksum                                FAIL
#           \- Find row differences                                  FAIL
#
# Transformation for \-\-changes\-for=server2:
#
# Data differences found among rows:
UPDATE db2\&.t1 SET b = \*(AqTest 789\*(Aq WHERE a = \*(Aq1\*(Aq;
UPDATE db2\&.t1 SET b = \*(AqTest 123\*(Aq WHERE a = \*(Aq3\*(Aq;
DELETE FROM db2\&.t1 WHERE a = \*(Aq5\*(Aq;
INSERT INTO db2\&.t1 (a, b) VALUES(\*(Aq4\*(Aq, \*(AqNew row \- db1\*(Aq);
# Database consistency check failed\&.
#
# \&.\&.\&.done
.fi
.if n \{\
.RE
.\}
.PP
With the
\fB\-\-difftype=sql\fR
SQL generation option set,
\fB\-\-show\-reverse\fR
shows the object transformations in both directions\&. Here is an excerpt of the results:
.sp
.if n \{\
.RS 4
.\}
.nf
shell> \fBmysqldbcompare \-\-server1=root:root@localhost \e\fR
          \fB\-\-server2=root:root@localhost db1:db2 \-\-changes\-for=server1 \e\fR
          \fB\-\-show\-reverse \-a \-\-difftype=sql\fR
[\&.\&.\&.]
#                                                   Defn    Row     Data
# Type      Object Name                             Diff    Count   Check
# \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
# TABLE     t1                                      pass    pass    \-
#           \- Compare table checksum                                FAIL
#           \- Find row differences                                  FAIL
#
# Transformation for \-\-changes\-for=server1:
#
# Data differences found among rows:
UPDATE db1\&.t1 SET b = \*(AqTest 123\*(Aq WHERE a = \*(Aq1\*(Aq;
UPDATE db1\&.t1 SET b = \*(AqTest 789\*(Aq WHERE a = \*(Aq3\*(Aq;
DELETE FROM db1\&.t1 WHERE a = \*(Aq4\*(Aq;
INSERT INTO db1\&.t1 (a, b) VALUES(\*(Aq5\*(Aq, \*(AqNew row \- db2\*(Aq);
#
# Transformation for reverse changes (\-\-changes\-for=server2):
#
# # Data differences found among rows:
# UPDATE db2\&.t1 SET b = \*(AqTest 789\*(Aq WHERE a = \*(Aq1\*(Aq;
# UPDATE db2\&.t1 SET b = \*(AqTest 123\*(Aq WHERE a = \*(Aq3\*(Aq;
# DELETE FROM db2\&.t1 WHERE a = \*(Aq5\*(Aq;
# INSERT INTO db2\&.t1 (a, b) VALUES(\*(Aq4\*(Aq, \*(AqNew row \- db1\*(Aq);
# Database consistency check failed\&.
#
# \&.\&.\&.done
.fi
.if n \{\
.RE
.\}
.sp
LIMITATIONS.PP
The utility reads the primary key of each row into a data structure, which is then used to generate checksums for each row\&. The primary key and checksum are then sorted and compared to detect which rows differ\&. Due to this design, the utility may exhibit slower performance for very large tables (many rows) especially for tables with wide primary keys\&. Use of this utility with tables that have blob fields as part of the primary key is not recommended\&.
PERMISSIONS REQUIRED.PP
The user must have the SELECT, CREATE TEMPORARY TABLES and INSERT privileges for the databases being compared on both connections\&. The user must also have SELECT privilege on the mysql database\&. If the binary log is enabled and the
\fB\-\-disable\-binary\-logging\fR
option is used, the user must also have the SUPER privilege\&.
.SH "COPYRIGHT"
.br
.PP
Copyright \(co 2006, 2017, Oracle and/or its affiliates. All rights reserved.
.PP
This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License.
.PP
This documentation is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
.PP
You should have received a copy of the GNU General Public License along with the program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or see http://www.gnu.org/licenses/.
.sp
.SH "SEE ALSO"
For more information, please refer to the MySQL Utilities and Fabric
documentation, which is available online at
http://dev.mysql.com/doc/index-utils-fabric.html
.SH AUTHOR
Oracle Corporation (http://dev.mysql.com/).
